 /*******************************************************************************
  * Copyright (c) 2000, 2006 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.ui.internal.decorators;

 import java.util.List ;
 import java.util.ListIterator ;

 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Font;
 import org.eclipse.swt.graphics.Image;

 /**
  * The Decoration Result is the result of a decoration.
  */
 public class DecorationResult {

     private List prefixes;

     private List suffixes;

     private ImageDescriptor[] descriptors;
     
     private Color foregroundColor;
     
     private Color backgroundColor;
     
     private Font font;

     DecorationResult(List prefixList, List suffixList,
             ImageDescriptor[] imageDescriptors,
             Color resultForegroundColor,
             Color resultBackgroundColor,
             Font resultFont) {
         prefixes = prefixList;
         suffixes = suffixList;

         //Don't set the field if there are no entries
 if (hasOverlays(imageDescriptors)) {
             descriptors = imageDescriptors;
         }
         foregroundColor = resultForegroundColor;
         backgroundColor = resultBackgroundColor;
         font = resultFont;
     }

     /**
      * Return whether or not any of the imageDescriptors
      * are non-null.
      * @param imageDescriptors
      * @return <code>true</code> if there are some non-null
      * overlays
      */
     private boolean hasOverlays(ImageDescriptor[] imageDescriptors) {
         for (int i = 0; i < imageDescriptors.length; i++) {
             if (imageDescriptors[i] != null) {
                 return true;
             }
         }
         return false;
     }

     /**
      * Decorate the Image supplied with the overlays.
      * @param image
      * @param overlayCache
      * @return Image
      */
     Image decorateWithOverlays(Image image, OverlayCache overlayCache) {

         //Do not try to do anything if there is no source or overlays
 if (image == null || descriptors == null) {
             return image;
         }

         return overlayCache.applyDescriptors(image, descriptors);
     }

     /**
      * Decorate the String supplied with the prefixes and suffixes.
      * This method is public for use by the test suites and is not intended
      * to be referenced by other workbench internals.
      * @param text
      * @return String
      */
     public String decorateWithText(String text) {

         if (prefixes.isEmpty() && suffixes.isEmpty()) {
             return text;
         }

         StringBuffer result = new StringBuffer ();

         ListIterator prefixIterator = prefixes.listIterator();

         while (prefixIterator.hasNext()) {
             result.append(prefixIterator.next());
         }

         result.append(text);

         ListIterator suffixIterator = suffixes.listIterator();

         while (suffixIterator.hasNext()) {
             result.append(suffixIterator.next());
         }

         return result.toString();
     }

     /**
      * Get the descriptor array for the receiver.
      * @return ImageDescriptor[] or <code>null</code>
      */
     ImageDescriptor[] getDescriptors() {
         return descriptors;
     }

     /**
      * Get the prefixes for the receiver.
      * @return List
      */
     List getPrefixes() {
         return prefixes;
     }

     /**
      * Get the suffixes for the receiver.
      * @return List
      */
     List getSuffixes() {
         return suffixes;
     }

     /**
      * Return the background Color for the result.
      * @return Color
      */
     Color getBackgroundColor() {
         return backgroundColor;
     }
     /**
      * Return the font for the result.
      * @return Font
      */
     Font getFont() {
         return font;
     }
     /**
      * Return the foreground color for the result.
      * @return Color
      */
     Color getForegroundColor() {
         return foregroundColor;
     }
 }

